package com.jpruby.interceptor;

import com.jpruby.domain.common.AppHttpCodeEnum;
import com.jpruby.exception.SystemException;
import com.jpruby.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 　　┏┓　　　┏┓+ +
 * 　┏┛┻━━━┛┻┓ + +
 * 　┃　　　　　　　┃
 * 　┃　　　━　　　┃ ++ + + +
 * ████━████ ┃+
 * 　┃　　　　　　　┃ +
 * 　┃　　　┻　　　┃
 * 　┃　　　　　　　┃ + +
 * 　┗━┓　　　┏━┛
 * 　　　┃　　　┃
 * 　　　┃　　　┃ + + + +
 * 　　　┃　　　┃    草泥马登场
 * 　　　┃　　　┃ +  神兽保佑
 * 　　　┃　　　┃    代码无bug
 * 　　　┃　　　┃　　+
 * 　　　┃　 　　┗━━━┓ + +
 * 　　　┃ 　　　　　　　┣┓
 * 　　　┃ 　　　　　　　┏┛
 * 　　　┗┓┓┏━┳┓┏┛ + + + +
 * 　　　　┃┫┫　┃┫┫
 * 　　　　┗┻┛　┗┻┛+ + + +
 * Created with IntelliJ IDEA.
 * Project: demo
 * Author: jpruby
 * Date: 2022/04/25/14:00
 * Description: 一看就会，一写就废
 * FilePath: com.jpruby.interceptor
 * "hello world" is classical
 * Copyright (c) 2022, All Rights Reserved.
 */
@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取请求头的token
        String token = request.getHeader("token");
        if(!StringUtils.hasText(token)){
            //token为空 直接拦截 如果抛出异常就不要return false了；
          //response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
            //统一异常全局处理
            throw new SystemException(AppHttpCodeEnum.NEED_LOGIN);
          //return false;
        }
        //解析token

        try {
            Claims claims = JwtUtil.parseJWT(token);
            String subject = claims.getSubject();

        } catch (Exception e) {
            e.printStackTrace();
            //response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
            //return false;
            //统一异常全局处理
            throw new SystemException(AppHttpCodeEnum.NEED_LOGIN);
        }

        //如果出现异常未登录 直接返回异常统一处理
        return true;

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
